package cn.itcast.scala.course03

/**
  * create by zhangtian on 2018/12/28
  */
object ScalaNumeric {
  def main(args: Array[String]): Unit = {
    val x:Int = 10 ; // 定义的一个不可改变的变量x 其中int可以在不显示指定，scala会进行自动类型推导
    var y = 20 ;// 定义的一个可以改变的变量y
    lazy val z = 30 ;// 定义的一个惰性加载的变量z，z在scala编译时并不会立即计算赋值，而在第一次使用的时候在进行赋值，若定义的变量在后续可能不会使用到，则可以使用lazy
    println(x) ;
    println(x + 1) ;
    println(y) ;
    println(z) ;

    println("*************************************")

    val a:Byte = 10 ; // 一个字节
    val b:Short = 20 ;// 两个字节
    val c:Int = 30 ;// 四个字节
    val d:Long = 40 ;// 四个字节
    val e:Float = 50 ;// 八个字节 带小数点
    val f:Double = 60.98765 ;// 八个字节 带小数点

    val k:Long = b ;// 低精度向高精度赋值  不需要转换

    val m = true ;
    val n = false ;
    val q = 'x' ;
    val u:Unit = () ;// Unit函数类型的返回值，函数的返回有副作用
    val p = () ; // 自动推断为Unit类型

    // NULL类型表示一个引用类型的数据为空，Scala一般不使用NULL,而使用Nothing
    // Nothing 表示程序异常终止
    def foo() = throw new Exception("Error occurred !") ;// 返回Nothing，表示程序异常终止

    val name = "ZhangTian" ;// Scala中String同java中的String，但是新增了字符串插值的新特性
    val t = s"my name is ${name}" ;// s作为一个标识


    println(a) ;
    println(b) ;
    println(c) ;
    println(d) ;
    println(e) ;
    println(f) ;

    println(name) ;
    println(t) ;
  }
}
